wayland: Avoid a crash
authorMatthias Clasen <mclasen@redhat.com>
Thu, 19 Nov 2015 19:39:42 +0000 (14:39 -0500)
committerMatthias Clasen <mclasen@redhat.com>
Thu, 19 Nov 2015 19:40:55 +0000 (14:40 -0500)
We can end up in situations where NULL gets passed to
get_transient_parent(). Embrace it instead of avoiding it.

https://bugzilla.gnome.org/show_bug.cgi?id=758327

gdk/wayland/gdkwindow-wayland.c

index 4df37f11b222c59506b307cf9c92494bef2b42b8..0834235b12678009a8d1262145e63d5ac4790222 100644 (file)
@@ -1274,7 +1274,7 @@ should_map_as_popup (GdkWindow *window)
 static GdkWindow *
 get_popup_parent (GdkWindow *window)
 {
-  do
+  while (window)
     {
       GdkWindowImplWayland *impl = GDK_WINDOW_IMPL_WAYLAND (window->impl);
 
@@ -1283,7 +1283,6 @@ get_popup_parent (GdkWindow *window)
 
       window = impl->transient_for;
     }
-  while (window);
 
   return NULL;
 }
@@ -1351,9 +1350,7 @@ gdk_wayland_window_map (GdkWindow *window)
             }
 
           if (transient_for)
-            transient_for = gdk_window_get_toplevel (transient_for);
-          if (transient_for)
-            transient_for = get_popup_parent (transient_for);
+            transient_for = get_popup_parent (gdk_window_get_toplevel (transient_for));
 
           /* If the position was not explicitly set, start the popup at the
            * position of the device that holds the grab.